package com.chzu.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chzu.pojo.SysMenu;
import com.chzu.pojo.SysPermission;
import com.chzu.pojo.SysRole;
import com.chzu.pojo.SysUser;
import com.chzu.result.JsonResult;
import com.chzu.result.QueryInfo;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.security.core.parameters.P;

import java.util.List;

/**
 * @Author lz
 * @Version 1.0
 * @Company 滁州大健康与养老产业研究院
 * @ClassName SysUserMapper
 * @Description dao层
 * @Date 2022/01/27 14:33
 */
public interface SysUserMapper extends BaseMapper<SysUser> {


    /**
     *  根据用户信息查询用户
     * @param value 登录用户标识（username,或者 openid)
     * @return
     */
    SysUser finByUsername(@Param("value") String value);

    /**
     * 根据用户id查询权限信息
     * @param userId 用户id
     * @return
     */
    List<SysRole> findRoles(@Param("userId") Integer userId);

    /**
     * 根据用具id查询用户菜单
     * @param userId 用户id
     * @return
     */
    List<SysMenu> findMenus(@Param("userId") Integer userId);

    /**
     * 根据父级菜单id和用户id查询子菜单
     * @param id 父菜单
     * @param userId 用户id
     * @return
     */
    List<SysMenu> findChildrenMenu(@Param("id") Integer id,@Param("userId") Integer userId);

    /**
     *  根据用户id查询权限数据
     * @param userId 用户id
     * @return
     */
    List<SysPermission> findPermissions(@Param("userId") Integer userId);

    /**
     * 微信小程序进入添加信息
     * @param openid 小程序唯一标识
     */
    @Insert("insert into min_dream.sys_user(open_id) values (#{openid})")
    void insertOpenid(@Param("openid") String openid);

    /**
     * 根据openid更新用户信息
     * @param user 用户对象
     * @return 受影响的行数
     */
    int updateInfo(SysUser user);

    /**
     * 判断用户是否存在
     * @param value 用户标识
     * @return 结果
     */
    int isExistenceUser(@Param("value") String value);


    /**
     *  根据小程序的唯一标识创建用户
     * @param openId 小程序唯一标识
     * @return 受影响的行数
     */
    int insertWxUser(@Param("openId") String openId);

    /**
     *  根据用户标识为用户分配角色
     * @param value 用户标识
     * @return 受影响行数
     */
    int assignRoles(@Param("value") String value);

    /**
     * 分页查询用户信息
     * @param queryString
     * @return 分页数据
     */
    Page<SysUser> findPage(@Param("queryString") String queryString);

    /**
     * 添加用户信息
     * @param user 用户
     */
    void insertUser(SysUser user);

    /**
     *  修改用户信息
     * @param user 用户
     */
    void updateUser(SysUser user);

    /**
     *  删除用户信息
     * @param id 用户id
     */
    void deleteUser(Integer id);

    /**
     *  根据用户信息用的角色列表，添加用户的角色
     * @param userId 用户id
     * @param roleId 角色id
     */
    void insertUserRoles(@Param("userId") Integer userId, @Param("roleId") Integer roleId);

    /**
     *  根据用户id去删除角色列表
     * @param userId 用户id
     */
    void deleteRolesByUserId(@Param("userId") Integer userId);

    /**
     * 根据用户id查询用户
     * @param id 用户id
     * @return
     */
    SysUser findById(Integer id);
}
